{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "66a60466",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here are the main steps you will to through\n",
    "    # 1. Look at the big picture.\n",
    "    # 2. Get the data.\n",
    "    # 3. Discover and visualize the data to gain insights.\n",
    "    # 4. Prepare the data for Machine Learning algorithms.\n",
    "    # 5. Select a model and train it.\n",
    "    # 6. Fine-tune your model.\n",
    "    # 7. Present your solution.\n",
    "    # 8. Launch,monitor,and maintain your system.\n",
    "    \n",
    "# Working with Real Data\n",
    "# When you are learning about Machine Learning, it is best to experiment with read-world data, not artificial\n",
    "# datasets. Fortunately, there are thousands of open datasets to choose from, ranging across all sorts of domains\n",
    "# In this chapter we'll use the California Housing Prices dataset from the StatLib repository. This dataset from\n",
    "# 1990 California census. It is not exactly recent, but it has many qualities for learning, so we will pretend\n",
    "# it is recent data. For teaching purposes I've added a categorical attribute and removed a few features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "60bdfd55",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Look at the Big Picture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "aca6683a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Your first task is to use the California 人口普查 data to build a model of housing price in the state. This\n",
    "# data includes metrics such as the population, median income, and median housing price for each block in\n",
    "# California. Block groups are the smallest geographical unit for which the 美国人口普查局 publishes sample data\n",
    "# (a block group typically has a population of 600 to 3000 people). We will call them \"districts\" for short."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f35dcd88",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Your model should learn from this data and be able to predict the median housing price in an district, given\n",
    "# all the other metrics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "35a283b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Since you are a well-organized data scientist, the first thing you should do is pull out your Machine Learning\n",
    "# project checklist. You can start with the one in Appendix B."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7ca6f739",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Frame the problem"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "37698d1e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# The first question to ask your boss is what exactly the business objective is.Building a model is probably \n",
    "# not the end goal. How does the company expect to use and benefit from this model? Knowing the objective is \n",
    "# important because it will determine how you frame the problem, which algorithms you will select, which\n",
    "# performance measure you will use to evaluate you model,and how much effort you will spend tweaking it"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4bdc9802",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Your boss answers that your model's output(a prediction of a district's median housing price) will be fed to\n",
    "# another Machine Learning system, along with many other signals. This downstream system will determine whether\n",
    "# it is worth investing in a given area or not. Getting this right is critical, as it directly affects revenue."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c26f6434",
   "metadata": {},
   "outputs": [],
   "source": [
    "#                                         Pipelines\n",
    "# A sequence of data processing components is called a data pipeline. Pipelines are very common in Machine\n",
    "# Learning systems, since there is a lot of data to manipulate and many data transformations to apply.\n",
    "\n",
    "# Components typically run asynchronously. Each component pulls in a large amount of data, process it, and spits\n",
    "# out the result in another data store. Then,some time later, the next component in the pipeline pulls this data\n",
    "# and spits out its own output. Each component is fairly self-contained: the interface between components is\n",
    "# simply the data store. This makes the system simple to grasp(with the help of a data flow graph), and different\n",
    "# teams can focus on different components. Moreover, if a component breaks down, the downstream can continue to\n",
    "# run normally(at least for a while) by just using the last output from the broken component, This makes the\n",
    "# architecture quite robust.\n",
    "# On the other hand, a broken component can go unnoticed for some time if proper monitoring is not implemented.\n",
    "# The data gets stale and the overall system's performance drops."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9a273f6f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# The next question to ask your boss is what the current solution looks like(if any). The current situation will\n",
    "# often give you a reference for performance, as well as insights on how to sovle the problem. Your boss answers\n",
    "# that the district housing prices are currently estimated manually by eperts: a team gathers up-to-date\n",
    "# information about a district, and when they cannot get the median housing price, they estimate it using\n",
    "# complex rules."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a280773b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# This is costly and time-consuming, and their estimates are not great; in cases where they manage to find out\n",
    "# the actual median housing price, they often realize that their estimates were off more than 20%. This is why\n",
    "# company thinks that it would be useful to train a model to predict a district's median housing price, given\n",
    "# other data about that district. The census data looks like a greate dataset to exploit for this purpose, since\n",
    "# it includes the median housing prices of thousands of districts, as well as other data.\n",
    "# With all this information, you now ready to start designing your system. \n",
    "\n",
    "# First, you need to frame the problem:\n",
    "# is it supervised, unsupervised, or Reinforcement Learning? \n",
    "# Is it a classification task, regression task, or something else? \n",
    "# Should you use batch learning or oneline learning techniques? \n",
    "# Before you read on, pause and try to answer the question yourself."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "0e3eaa9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# it is clearly a typical supervised learning task, since you are given labeled train examples (each instance \n",
    "# comes with the expected output, i.e., the district's median housing price). It is also a typical regression\n",
    "# task, since you are asked to predict a value. More specially, \n",
    "# this is a multiple regrssion problem, since the system will use multiple features to make a prediction(it will \n",
    "# use the district's population, the median income,etc.). \n",
    "# It is also a univariate regression problem, since we are only trying to predict a single value for each \n",
    "# district.If we were trying to predict multiple values per district, it would be a multivariate regression\n",
    "# problem.\n",
    "# Finally, there is no continuous flow of data coming into the system, there is no particular need to adjust to\n",
    "# changing data rapidly, and the data is small enouth to fit in memory, so plain batch learning should do just\n",
    "# fine."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1f38039e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Select a Performance Measure"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "10f2dc9d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Your next step is to select a performance measure. A typical performance measure for regression problems is\n",
    "# the Root Mean Square Error(RMSE). It gives an idea of how much error the system typically makes in its\n",
    "# predictions, with a higher weight for large errors. xxx shows the mathematical formula to compute the RMSE."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "be9209f8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# This equation introduces several very common Machine Learning notations that we will use throughout this book:\n",
    "#     m is the number of instances in the dataset you are measuring the RMSE on.\n",
    "#     -- for example, if you are evaluating the RMSE on a validation set of 2000 districts, then m=2000.\n",
    "    \n",
    "#     x(i) is a vector of all the feature values(excluding the label) of the ith instance in the dataset, and\n",
    "#     y(i) is its label(the desired output value for that instance).\n",
    "#     -- for example, if the first district in the dataset is located at longitude -118.29°, latitude 33.91°,\n",
    "#     and it has 1416 住户 with a median income of $38372, and the median house value is $156499(ignoring the\n",
    "#     other features for now), then \n",
    "#     x(1) = (...)\n",
    "    \n",
    "#     X is a matrix containing all the feature values(excluding labels) of all in the dataset. There is one row\n",
    "#     per instance, and the ith row is equal to the transpose of x(i),noted (x(i))T.\n",
    "#     -- for example, if the first district is just described, then the matrix X looks like this.\n",
    "#     ...\n",
    "    \n",
    "#     h is your system's prediction funcition, also called a hypothesis. when your system is given an instance's\n",
    "#     feature vector x(i), it outputs a predicted value y_hat(i) = h(x(i)) for that instance.\n",
    "#     -- for example,if your system predicts that the median housing price in the first district is $158400,then\n",
    "#     y_hat(1) = h(X(1)) = 158400. the prediction error for this district is y_hat(1) - y(1) = 2000.\n",
    "    \n",
    "#     RMSE(X,h) is the cost function measured on the set of examples using your hypothesis h.\n",
    "# We use lowercse 斜体 for scalar values(such as m or y(i)) and function names(such as h), lowercase 粗体 for\n",
    "# vectors(such as x(i)), and Uppercase 粗体 for matrices(such as X)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "edf33f25",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Even though the RMSE is generally the preferred performacne measure for regression task, in some contexts you\n",
    "# may consider using the mean absolute error(MAE,also called the average deviation)\n",
    "\n",
    "# Both the RMSE and the MAE are ways to measure the distance between tow vectors: the vector of predictions and\n",
    "# the vector of target values. Various distance measures, or norms, are possible:\n",
    "#     Computing the root of a sum of squares(RMSE) corresponds to the Euclidean norm: this is the notion of\n",
    "#     distance you are familiar with. noted ||·||2\n",
    "    \n",
    "#     Compution the sum of absolutes(MAE) corresponds to the ..1. This is sometimes call Manhattan norm because\n",
    "#     it measures the distance between tow points in a city if you can only travel along orthogonal city bolck.\n",
    "#     noted ||·||1\n",
    "    \n",
    "#     More generally, the ..k norm of a vector v containing n elements is defined as \n",
    "#     ||v||k = (|v0|k + ... + |vn|k)1/k. ℓ0 gives the number of nonezero elements in the vector,ℓ∞ gives the\n",
    "#     maximum absolute value in the vector.\n",
    "    \n",
    "#     The higher the norm index, the more it focuses on large values and 忽略 small ones.This is why the RMSE is\n",
    "#     RMSE is more sensitive to outliers than the MAE.but when outliers are 指数级 rare(like in a bell-shaped\n",
    "#     curve), the RMSE performs very well and is generally preferred."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "b167ac42",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Check the Assumptions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "7197d372",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Lastly,it is good practice to list and verify the assumptions that have been made so far(by you or others);\n",
    "# this can help you catch serious issues early on. For example, the district prices that your system outputs are\n",
    "# going to be fed into a downstream Machine Learning system, and you assume that these prices are going to be \n",
    "# used as such. But what if the downstream system converts the prices into categories(e.g., cheap, medium, \n",
    "# or expensive) and then uses those categories instead of the prices themselves? In this case, getting the price\n",
    "# perfectly right is not important at all; your system just need to get the category right. if that's so, then\n",
    "# the problem should have been framed as a classification task, not a regression task. You don't want to find\n",
    "# this out after working on a regression system for months.\n",
    "\n",
    "# Fortunately,after talking with the team in charge of the downstream system, you are confident that they do\n",
    "# indeed need the actual prices, no just categories. Greate! You're all set, the lights are green, and you can\n",
    "# start coding now!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "47f682eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "7a3bb027",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get the workspace\n",
    "# First you will need to have Python installed. It is probably already installed on your system. if not, you can\n",
    "# get it at ....\n",
    "# Next you need to create a workspace directory for your Machine Learning code and datasets. Open a terminal and\n",
    "# type the following commands(...)\n",
    "# You will need a number of Python modules:Jupyter,NumPy,pandas,Matplotlib,and Scikit-Learn.If you already have\n",
    "# Jupyter running with all these modules installed, you can safely skip to ... "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "cbbf26a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# # Download the Data\n",
    "# In typical enviroments your data would be available in a relational database(or some other common data store)\n",
    "# and spread across multiple tables/documents/files. To access it, you would first need to get your 身份凭证（\n",
    "# 账号、密钥）以及访问权限（允许访问哪些资源）and familiarize yourself with the data schema. In this project,\n",
    "# however, things are much simpler: you will just download a single compressed file, housing.tgz, which contains\n",
    "# a comma-separated values(CSV) file called housing.csv with all the data.\n",
    "\n",
    "# You could use your web browser to download the file and run tar xzf housing.tgz to decompress it and extract\n",
    "# the CSV file, but it is preferable to create a small function to do that. Having a function that downloads the\n",
    "# data is useful in particular if the data changes regularly: you can write a small script that uses the function\n",
    "# to fetch the latest data(or you can set up a scheduled job to do that automatically at regular intervals).\n",
    "# Automating the process of fetching the data is also useful if you need to install the dataset on multiple\n",
    "# machines.Here the function to fetch the data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "956f37eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import tarfile\n",
    "import urllib\n",
    "\n",
    "DOWNLOAD_ROOT = \"https://raw.githubusercontent.com/ageron/handson-ml2/master/\"\n",
    "HOUSING_PATH = os.path.join(\"datasets\",\"housing\")\n",
    "HOUSING_URL = DOWNLOAD_ROOT + \"datasets/housing/housing.tgz\"\n",
    "\n",
    "def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):\n",
    "    os.makedirs(housing_path,exist_ok=True)\n",
    "    tgz_path = os.path.join(housing_path, \"housing.tgz\")\n",
    "    urllib.request.urlretrieve(housing_url, tgz_path)\n",
    "    housing_tgz = tarfile.open(tgz_path)\n",
    "    housing_tgz.extractall(path=housing_path)\n",
    "    housing_tgz.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "2c6873ce",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Now when you call fetch_housing_data(), it creates a datasets/housing directory in your workspace, downloads\n",
    "# the housing.tgz file, and extracts the housing.csv file from it in this directory.\n",
    "# Now let's load the data using pandas. Once again, you should write a small function to load the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "31afa981",
   "metadata": {},
   "outputs": [],
   "source": [
    "fetch_housing_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "c02209cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "def load_housing_data(housing_path = HOUSING_PATH):\n",
    "    csv_path = os.path.join(housing_path,\"housing.csv\")\n",
    "    return pd.read_csv(csv_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "97d8ff93",
   "metadata": {},
   "outputs": [],
   "source": [
    "# This function returns a pandas DataFrame object containing all the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "ce9f2e4f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Take a Quick Look at the Data Structure"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "1bd205ee",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Let's take a look at the top five rows using the DataFrame's head() method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "10f715c1",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>ocean_proximity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-122.23</td>\n",
       "      <td>37.88</td>\n",
       "      <td>41.0</td>\n",
       "      <td>880.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>322.0</td>\n",
       "      <td>126.0</td>\n",
       "      <td>8.3252</td>\n",
       "      <td>452600.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-122.22</td>\n",
       "      <td>37.86</td>\n",
       "      <td>21.0</td>\n",
       "      <td>7099.0</td>\n",
       "      <td>1106.0</td>\n",
       "      <td>2401.0</td>\n",
       "      <td>1138.0</td>\n",
       "      <td>8.3014</td>\n",
       "      <td>358500.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-122.24</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1467.0</td>\n",
       "      <td>190.0</td>\n",
       "      <td>496.0</td>\n",
       "      <td>177.0</td>\n",
       "      <td>7.2574</td>\n",
       "      <td>352100.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-122.25</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1274.0</td>\n",
       "      <td>235.0</td>\n",
       "      <td>558.0</td>\n",
       "      <td>219.0</td>\n",
       "      <td>5.6431</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-122.25</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1627.0</td>\n",
       "      <td>280.0</td>\n",
       "      <td>565.0</td>\n",
       "      <td>259.0</td>\n",
       "      <td>3.8462</td>\n",
       "      <td>342200.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "0    -122.23     37.88                41.0        880.0           129.0   \n",
       "1    -122.22     37.86                21.0       7099.0          1106.0   \n",
       "2    -122.24     37.85                52.0       1467.0           190.0   \n",
       "3    -122.25     37.85                52.0       1274.0           235.0   \n",
       "4    -122.25     37.85                52.0       1627.0           280.0   \n",
       "\n",
       "   population  households  median_income  median_house_value ocean_proximity  \n",
       "0       322.0       126.0         8.3252            452600.0        NEAR BAY  \n",
       "1      2401.0      1138.0         8.3014            358500.0        NEAR BAY  \n",
       "2       496.0       177.0         7.2574            352100.0        NEAR BAY  \n",
       "3       558.0       219.0         5.6431            341300.0        NEAR BAY  \n",
       "4       565.0       259.0         3.8462            342200.0        NEAR BAY  "
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing = load_housing_data()\n",
    "housing.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "05239565",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 20640 entries, 0 to 20639\n",
      "Data columns (total 10 columns):\n",
      " #   Column              Non-Null Count  Dtype  \n",
      "---  ------              --------------  -----  \n",
      " 0   longitude           20640 non-null  float64\n",
      " 1   latitude            20640 non-null  float64\n",
      " 2   housing_median_age  20640 non-null  float64\n",
      " 3   total_rooms         20640 non-null  float64\n",
      " 4   total_bedrooms      20433 non-null  float64\n",
      " 5   population          20640 non-null  float64\n",
      " 6   households          20640 non-null  float64\n",
      " 7   median_income       20640 non-null  float64\n",
      " 8   median_house_value  20640 non-null  float64\n",
      " 9   ocean_proximity     20640 non-null  object \n",
      "dtypes: float64(9), object(1)\n",
      "memory usage: 1.6+ MB\n"
     ]
    }
   ],
   "source": [
    "# Each row represents one district. There are 10 attributes: longitude, latitude, housing_median_age, \n",
    "# total_rooms, total_bed_rooms, population, households, median_income, median_house_value, and ocean_proximity.\n",
    "\n",
    "# The info() method is useful to get a quick description of the data, in particular the total number of rows,\n",
    "# each attribute's type, and the number of nonnull values.\n",
    "housing.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "7d06738f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ocean_proximity\n",
       "<1H OCEAN     9136\n",
       "INLAND        6551\n",
       "NEAR OCEAN    2658\n",
       "NEAR BAY      2290\n",
       "ISLAND           5\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# There are 20640 instances in the dataset, which means that it is fairly small by Machine Learning standards,\n",
    "# but it is perfert to get started.Notice that the total_bedrooms attribute has only 20433 nonnull values,meaning\n",
    "# that 207 districts are missing this feature.We will neet to take care of this later.\n",
    "# All attributes are numerical, expect the ocean_proximity field.Its type is object, so it could hold any kind of\n",
    "# Python object. But since you loaded this data from a csv file, you know that it must be a text attribute. when\n",
    "# you looked at the top five rows, you probably noticed that the values in the ocean_proximity column were \n",
    "# repetitive, which means that it is probably a categorical attribute. You can find out what categories exist \n",
    "# and how many districts belong to each category by using the value_counts() mehthod:\n",
    "housing[\"ocean_proximity\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "6c9100ad",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20433.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-119.569704</td>\n",
       "      <td>35.631861</td>\n",
       "      <td>28.639486</td>\n",
       "      <td>2635.763081</td>\n",
       "      <td>537.870553</td>\n",
       "      <td>1425.476744</td>\n",
       "      <td>499.539680</td>\n",
       "      <td>3.870671</td>\n",
       "      <td>206855.816909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2.003532</td>\n",
       "      <td>2.135952</td>\n",
       "      <td>12.585558</td>\n",
       "      <td>2181.615252</td>\n",
       "      <td>421.385070</td>\n",
       "      <td>1132.462122</td>\n",
       "      <td>382.329753</td>\n",
       "      <td>1.899822</td>\n",
       "      <td>115395.615874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-124.350000</td>\n",
       "      <td>32.540000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.499900</td>\n",
       "      <td>14999.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-121.800000</td>\n",
       "      <td>33.930000</td>\n",
       "      <td>18.000000</td>\n",
       "      <td>1447.750000</td>\n",
       "      <td>296.000000</td>\n",
       "      <td>787.000000</td>\n",
       "      <td>280.000000</td>\n",
       "      <td>2.563400</td>\n",
       "      <td>119600.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-118.490000</td>\n",
       "      <td>34.260000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>2127.000000</td>\n",
       "      <td>435.000000</td>\n",
       "      <td>1166.000000</td>\n",
       "      <td>409.000000</td>\n",
       "      <td>3.534800</td>\n",
       "      <td>179700.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-118.010000</td>\n",
       "      <td>37.710000</td>\n",
       "      <td>37.000000</td>\n",
       "      <td>3148.000000</td>\n",
       "      <td>647.000000</td>\n",
       "      <td>1725.000000</td>\n",
       "      <td>605.000000</td>\n",
       "      <td>4.743250</td>\n",
       "      <td>264725.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>-114.310000</td>\n",
       "      <td>41.950000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>39320.000000</td>\n",
       "      <td>6445.000000</td>\n",
       "      <td>35682.000000</td>\n",
       "      <td>6082.000000</td>\n",
       "      <td>15.000100</td>\n",
       "      <td>500001.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          longitude      latitude  housing_median_age   total_rooms  \\\n",
       "count  20640.000000  20640.000000        20640.000000  20640.000000   \n",
       "mean    -119.569704     35.631861           28.639486   2635.763081   \n",
       "std        2.003532      2.135952           12.585558   2181.615252   \n",
       "min     -124.350000     32.540000            1.000000      2.000000   \n",
       "25%     -121.800000     33.930000           18.000000   1447.750000   \n",
       "50%     -118.490000     34.260000           29.000000   2127.000000   \n",
       "75%     -118.010000     37.710000           37.000000   3148.000000   \n",
       "max     -114.310000     41.950000           52.000000  39320.000000   \n",
       "\n",
       "       total_bedrooms    population    households  median_income  \\\n",
       "count    20433.000000  20640.000000  20640.000000   20640.000000   \n",
       "mean       537.870553   1425.476744    499.539680       3.870671   \n",
       "std        421.385070   1132.462122    382.329753       1.899822   \n",
       "min          1.000000      3.000000      1.000000       0.499900   \n",
       "25%        296.000000    787.000000    280.000000       2.563400   \n",
       "50%        435.000000   1166.000000    409.000000       3.534800   \n",
       "75%        647.000000   1725.000000    605.000000       4.743250   \n",
       "max       6445.000000  35682.000000   6082.000000      15.000100   \n",
       "\n",
       "       median_house_value  \n",
       "count        20640.000000  \n",
       "mean        206855.816909  \n",
       "std         115395.615874  \n",
       "min          14999.000000  \n",
       "25%         119600.000000  \n",
       "50%         179700.000000  \n",
       "75%         264725.000000  \n",
       "max         500001.000000  "
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Let's look at the other fields. The describe() method shows a summary of the numerical attribute.\n",
    "housing.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "ef55afc5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# The count,mean,min,and max rows are 一看就懂、非常直观.Note that the null values are ignored(so,for example,\n",
    "# the count of total_bedrooms is 20433, not 20640). The std row shows the standard deviation, which measure how\n",
    "# dispersed the values are. The 25%, 50% and 75% rows show the corresponding percentiles: a percentile indicates\n",
    "# the value below which a given percentage of observations in a group of observations fall. For example, 25% of \n",
    "# the districts have a housing_median_age lower than 18, while 50% are lower than 29 and 75% are lower than 37.\n",
    "# These are often called the 25th percentile (or first quartile), the median, and 75th percentile (or third\n",
    "# quartile)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "db229171",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Another quick way to get a feel of the type of data you are dealing with is to plot a histogram for each\n",
    "# numerical attribute. A histogram shows the number of instances(on the vertial axis) that have a given value\n",
    "# range (on the horizontal axis). You can either plot this one attribute at a time, or you can call the hist()\n",
    "# method one the whole dataset (as shown in the following code example), and it will plot a histogram for each\n",
    "# numerial attribute."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "5d7c4648",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<Axes: title={'center': 'longitude'}>,\n",
       "        <Axes: title={'center': 'latitude'}>,\n",
       "        <Axes: title={'center': 'housing_median_age'}>],\n",
       "       [<Axes: title={'center': 'total_rooms'}>,\n",
       "        <Axes: title={'center': 'total_bedrooms'}>,\n",
       "        <Axes: title={'center': 'population'}>],\n",
       "       [<Axes: title={'center': 'households'}>,\n",
       "        <Axes: title={'center': 'median_income'}>,\n",
       "        <Axes: title={'center': 'median_house_value'}>]], dtype=object)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABlYAAATDCAYAAAAEBwhXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzde3wU5dn/8e+Sw4bEsBIwpxKBVkA0YCmHEKoGhCRQAypq1LQRLCJ9QGwKiCCii2IiaQu0Qa1aHkAixaetKFQMCUXg4QkIxFIBKWoLKJUQDyHhEDdLMr8/+GXrktNusslmk8/79eIFM3Pt7D3XTjY3c819j8kwDEMAAAAAAAAAAABoVCdvNwAAAAAAAAAAAMBXUFgBAAAAAAAAAABwEYUVAAAAAAAAAAAAF1FYAQAAAAAAAAAAcBGFFQAAAAAAAAAAABdRWAEAAAAAAAAAAHARhRUAAAAAAAAAAAAXUVgBAAAAAAAAAABwEYUVAAAAAAAAAAAAF1FYAdq41atXy2Qy6fjx495uiqxWq0wmk9O6F154QatXr26R9xs5cqRGjhzZIvsGAADe0dS+TWFhoaxWq86cOVNr2+V9hgsXLshqtWr79u3Namt9TCaTrFZri+wbAABfVHO94Msvv/R2U2qp61pGR3V5H6YtXXMCfA2FFQAue/DBB7V7926ndS1ZWAEAAKhRWFioRYsW1VlYeeGFF/TCCy84li9cuKBFixa1WGEFAAD4jrquZeCSW2+9Vbt371ZUVJS3mwL4HH9vNwCA7+jRo4d69Ojh7WYAAAA4ue6667zdBAAA0EZxLaN+V111la666ipvNwPwSYxYAXzQf//3f+uGG25QUFCQwsLCdMcdd+jIkSNOMZMnT9YVV1yhTz75RD/60Y90xRVXKCYmRrNnz5bNZnOKPXnypO666y6Fhobqyiuv1I9//GPt27dPJpPJaTTK5cNne/XqpcOHD2vHjh0ymUwymUzq1auXpPqHk27fvl0mk8npDlLDMJSdna2ePXsqKChIP/jBD/TOO+/Ueezl5eWaM2eOevfurcDAQH3nO99RRkaGzp8/734iAQCA1xUUFOi2225Tjx49FBQUpGuuuUbTpk1zmkrEarXq0UcflST17t3b0e+o6U98eyqw48ePOy4QLFq0yBE7efJkSZf6SDX9lW+ra5qQ8vJyTZ06Vd26ddMVV1yhsWPH6qOPPqrzOD7++GOlpaUpPDxcZrNZ/fv31/PPP9+MzAAA4HtOnz6t++67TxaLRREREfrpT3+qsrIyx/ZvvvlG8+fPd/o//YwZM2qNSK1v2s1evXo5fqdLl0ap1lwjqLlGMmTIEP3hD39wxNT1O75Xr15KSUlRXl6efvCDH6hz58669tpr9d///d+13nPXrl2Kj49XUFCQvvOd72jhwoX6/e9/7/YUWjXt+OCDD3T33XfLYrEoLCxMs2bN0sWLF3X06FGNHTtWoaGh6tWrl7Kzs2vtw9VrIq72Yeq6duNK3+zbx3P48OEGP3NX7N+/X/fee6969eqlzp07q1evXrrvvvt04sSJWrHufB6vv/664uPjFRISoiuuuELJycn629/+5lbbgPowYgXwMVlZWXr88cd13333KSsrS1999ZWsVqvi4+O1b98+9enTxxFrt9s1YcIETZkyRbNnz9bOnTv1zDPPyGKx6Mknn5QknT9/XqNGjdLXX3+tJUuW6JprrlFeXp7uueeeRtuyYcMG3XXXXbJYLI7pN8xms9vHtGjRIi1atEhTpkzRXXfdpc8++0xTp05VVVWV+vXr54i7cOGCEhISdPLkST3++OMaOHCgDh8+rCeffFIHDx7U1q1bmTcVAAAf889//lPx8fF68MEHZbFYdPz4cS1dulQ33nijDh48qICAAD344IP6+uuvlZOTozfeeMMxXUVdI1WioqKUl5ensWPHasqUKXrwwQclye27MQ3D0O23367CwkI9+eSTGjp0qP7v//5P48aNqxX74YcfasSIEbr66qv161//WpGRkdqyZYseeeQRffnll3rqqaeakBkAAHzPnXfeqXvuuUdTpkzRwYMHNX/+fEmXbhCt+d3617/+VfPnz9dNN92kDz74QE899ZR2796t3bt3u31NYdasWVq7dq0WL16sQYMG6fz58zp06JC++uqrRl/797//XbNnz9a8efMUERGh3//+95oyZYquueYa3XzzzZKkDz74QImJierbt6/WrFmj4OBg/e53v1Nubq77yfn/UlNT9ZOf/ETTpk1TQUGBsrOzZbfbtXXrVk2fPl1z5szRunXr9Nhjj+maa67RxIkTJbl+TcSdPkxdXOmbfVtDn7mrjh8/rn79+unee+9VWFiYTp06pRdffFFDhw7Vhx9+qO7du0ty7/PIzMzUE088oQceeEBPPPGEKisr9ctf/lI33XST9u7dy4hnNJ8BoE1btWqVIck4duyYUVpaanTu3Nn40Y9+5BTz6aefGmaz2UhLS3OsmzRpkiHJ+J//+R+n2B/96EdGv379HMvPP/+8Icl45513nOKmTZtmSDJWrVrlWPfUU08Zl39tXH/99UZCQkKD7f62d99915BkvPvuu4ZhGEZpaakRFBRk3HHHHU5x//d//2dIctp3VlaW0alTJ2Pfvn1OsX/6058MScbmzZtrtQMAALQt9fURDMMwqqurDbvdbpw4ccKQZLz11luObb/85S/rfV1CQoJTn+GLL74wJBlPPfVUrdhJkyYZPXv2rLX+8n7OO++8Y0gyfvOb3zjFPfvss7X2nZycbPTo0cMoKytzin344YeNoKAg4+uvv671fgAAtCc1v0ezs7Od1k+fPt0ICgoyqqurjby8vDpjXn/9dUOS8fLLLzvW1fd7vGfPnsakSZMcy7Gxscbtt9/uUtsu309QUJBx4sQJx7qKigojLCzMmDZtmmPd3XffbYSEhBhffPGFY11VVZVx3XXX1dsvaawdv/71r53Wf//73zckGW+88YZjnd1uN6666ipj4sSJjnWuXhNxpw/TUL/MMBrum7nymTfVxYsXjXPnzhkhISFOx+Hq5/Hpp58a/v7+xsyZM532e/bsWSMyMtJITU1tctuAGkwFBviQ3bt3q6KiwmnYqyTFxMTolltu0V//+len9SaTSePHj3daN3DgQKehlDt27FBoaKjGjh3rFHffffd5tvH12L17t7755hv9+Mc/dlo/YsQI9ezZ02ndX/7yF8XGxur73/++Ll686PiTnJxca3oxAADgG0pKSvSzn/1MMTEx8vf3V0BAgKMPcPlUp63p3XfflaRafZS0tDSn5W+++UZ//etfdccddyg4ONipj/KjH/1I33zzjfbs2dNq7QYAwJsmTJjgtDxw4EB98803Kikp0bZt2ySp1jWNu+++WyEhIbWuabhi2LBheueddzRv3jxt375dFRUVLr/2+9//vq6++mrHclBQkPr27Vvrmsktt9ziGDEhSZ06dVJqaqrbba2RkpLitNy/f3+ZTCanESX+/v665pprnNri6jURV/sw9XG3b9bQZ+6qc+fOOUbo+Pv7y9/fX1dccYXOnz/v9J6ufh5btmzRxYsXdf/99zvlKigoSAkJCVw/gkcwFRjgQ2qGstZMf/Ft0dHRKigocFoXHBysoKAgp3Vms1nffPON0z4jIiJq7a+udS2h5pgiIyNrbbt83enTp/XJJ5/UGnZa4/L5PgEAQNtWXV2tpKQkff7551q4cKEGDBigkJAQVVdXa/jw4W5dHPG0r776Sv7+/urWrZvT+sv7J1999ZUuXryonJwc5eTk1Lkv+igAgI7i8t+bNVN7VVRUOH63Xj49p8lkUmRkpEvTd13ut7/9rXr06KHXX39dS5YsUVBQkJKTk/XLX/7Saap0V9pa095v9z9a4ppJWFiY03JgYGCd128CAwNVXl7uWHb1moirfZi6NKVv1tBn7qq0tDT99a9/1cKFCzV06FB16dJFJpNJP/rRj5r0eZw+fVqSNHTo0Drfr1Mnxhqg+SisAD6k5pfVqVOnam37/PPPnSr27uxz7969tdYXFxe738BvqekQ2Gw2p/WXX1ioOaa63q+4uNjp4bLdu3dX586d652nsynHDwAAvOfQoUP6+9//rtWrV2vSpEmO9Z988kmLvWdQUFCt/olUdx/l4sWL+uqrr5wuGFzeZ+natav8/PyUnp6uGTNm1PmevXv39kDLAQDwbTW/W7/44gun4ophGCouLna6CG42m+v8fX158SUkJMTx3NbTp087Rq+MHz9e//jHPzzS5pqL9N/W3GsmTeHqNRFX+zB18UbfrKysTH/5y1/01FNPad68eY71NptNX3/9tVOsq59HTS7+9Kc/1ZoNBfAUynOAD4mPj1fnzp1rPZTr5MmT2rZtm0aPHu32PhMSEnT27Fm98847TuvXr1/v0usvv5ujRk1B5IMPPnBav3HjRqfl4cOHKygoSK+99prT+sLCQqchr9Kl4bL//Oc/1a1bNw0ZMqTWn28XYQAAQNtnMpkkqdaDal966aVase7c/dhQbK9evVRSUuL0n/LKykpt2bLFKW7UqFGSVKuPsm7dOqfl4OBgjRo1Sn/72980cODAOvsodd0RCwBAR1NzzeLyaxp//vOfdf78eadrGr169ap1PWHbtm06d+5cvfuPiIjQ5MmTdd999+no0aO6cOFCs9uckJCgbdu2Od2AUV1drT/+8Y/N3re7XL0m4mofpi7u9M08xWQyyTCMWu/5+9//XlVVVU7rXP08kpOT5e/vr3/+85915mrIkCEtdjzoOBixAviQK6+8UgsXLtTjjz+u+++/X/fdd5+++uorLVq0SEFBQXrqqafc3uekSZO0bNky/eQnP9HixYt1zTXX6J133nFcXGhseOSAAQO0fv16vf766/rud7+roKAgDRgwQEOHDlW/fv00Z84cXbx4UV27dtWGDRu0a9cup9d37dpVc+bM0eLFi/Xggw/q7rvv1meffSar1VprmGpGRob+/Oc/6+abb9YvfvELDRw4UNXV1fr000+Vn5+v2bNnKy4uzu0cAAAA77j22mv1ve99T/PmzZNhGAoLC9OmTZtqTW8qXepzSNJvfvMbTZo0SQEBAerXr59CQ0NrxYaGhqpnz5566623NHr0aIWFhal79+7q1auX7rnnHj355JO699579eijj+qbb77Rb3/721r/cU9KStLNN9+suXPn6vz58xoyZIj+7//+T2vXrq31fr/5zW9044036qabbtJ//dd/qVevXjp79qw++eQTbdq0yTGnPAAAHVliYqKSk5P12GOPqby8XD/84Q/1wQcf6KmnntKgQYOUnp7uiE1PT9fChQv15JNPKiEhQR9++KFWrFghi8XitM+4uDilpKRo4MCB6tq1q44cOaK1a9cqPj5ewcHBzW7zggULtGnTJo0ePVoLFixQ586d9bvf/U7nz5+X1LpTSrl6TcSdPszl3OmbeUqXLl10880365e//KWjv7Zjxw6tXLlSV155pVOsq59Hr1699PTTT2vBggX617/+pbFjx6pr1646ffq09u7d6xjpBDQHI1YAHzN//nz9/ve/19///nfdfvvtevjhh3X99dersLCw0flD6xISEqJt27Zp5MiRmjt3ru688059+umneuGFFySp1i+xyy1atEgJCQmaOnWqhg0bpvHjx0uS/Pz8tGnTJl177bX62c9+pvvvv19ms1krVqyotY+nn35aWVlZys/P14QJE5STk6Pf/e536tevX622/u///q8mT56sl19+WbfeeqtSU1Mdc6oyYgUAAN8SEBCgTZs2qW/fvpo2bZruu+8+lZSUaOvWrbViR44cqfnz52vTpk268cYbNXToUBUVFdW775UrVyo4OFgTJkzQ0KFDZbVaJV2aluutt97SmTNndNddd+nRRx/V3Xffrfvvv9/p9Z06ddLGjRv14x//WNnZ2br99ttVWFiozZs313qv6667Tu+//75iY2P1xBNPKCkpSVOmTNGf/vSnJo0oBgCg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b71VvXr10l133aWkpCTt379f0qXRKsuXL9eCBQs0ceJExcbGas2aNbpw4YLWrVsnSSorK9PKlSv161//WmPGjNGgQYOUm5urgwcPauvWrd48PAAA2jy3n7Fy/vx53XDDDXrggQd055131hkzduxYrVq1yrEcGBjotD0jI0ObNm3S+vXr1a1bN82ePVspKSkqKiqSn5+fJCktLU0nT55UXl6eJOmhhx5Senq6Nm3a5G6TAQAAAAAA2o0bb7xRv/vd7/TRRx+pb9+++vvf/65du3Zp+fLlkqRjx46puLhYSUlJjteYzWYlJCSosLBQ06ZNU1FRkex2u1NMdHS0YmNjVVhYqOTk5Drf22azyWazOZbLy8slSXa7XXa7vdG218S4Egvy1RTkzH1tMWdmP6PJr22N42iLOWvLXMlXY5+5p3Ltqf24XVgZN26cxo0b12CM2WxWZGRkndtq7ohYu3atxowZI0nKzc1VTEyMtm7dquTkZB05ckR5eXnas2eP4uLiJEmvvPKK4uPjdfToUfXr18/dZgMAAAAAALQLjz32mMrKynTttdfKz89PVVVVevbZZ3XfffdJkoqLiyVJERERTq+LiIjQiRMnHDGBgYHq2rVrrZia19clKytLixYtqrU+Pz9fwcHBLh9DQUGBy7EgX01BztzXlnKWPazpr928ebPnGtKItpQzX9BQvhr7zD31uV64cMEj+3G7sOKK7du3Kzw8XFdeeaUSEhL07LPPKjw8XJJcuiNi9+7dslgsjqKKJA0fPlwWi0WFhYV1Flaae8dES6By2TTkrWk6Ut6ac9dCrX11Mpz+7gj584SOdL55UmN5I58AAABwxeuvv67c3FytW7dO119/vQ4cOKCMjAxFR0dr0qRJjjiTyeT0OsMwaq27XGMx8+fP16xZsxzL5eXliomJUVJSkrp06dJo2+12uwoKCpSYmKiAgIBG4zs68uU+cua+tpizWOuWJr/2kLXuEXee1BZz1pa5kq/GPnNPfa41dYPm8nhhZdy4cbr77rvVs2dPHTt2TAsXLtQtt9yioqIimc1ml+6IKC4udhRivi08PLzeuyY8dcdES6By2TTkrWk6Qt6ac9dCfZ4ZUi2pde9qaA86wvnWEurLm6fumgAAAED79uijj2revHm69957JUkDBgzQiRMnlJWVpUmTJjlmESkuLlZUVJTjdSUlJY5R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z3+uwYMHy2w26/vf/36dMVu2bNHw4cMVGhqqq666SnfeeaeOHTvWcg33Mk/lzTAM/epXv1Lfvn1lNpsVExOjzMzMlmu4l3kqbzU6yu8FoDEvvviiBg4cqC5duqhLly6Kj4/XO++8U2fstGnTZDKZtHz58tZtpA9xJZ9HjhzRhAkTZLFYFBoaquHDh+vTTz/1UovbrsZyee7cOT388MPq0aOHo3/24osverHFviMrK0smk0kZGRmOdYZhyGq1Kjo6Wp07d9bIkSN1+PBh7zXSR1yeS7vdrscee0wDBgxQSEiIoqOjdf/99+vzzz/3bkPRbr3wwgvq3bu3goKCNHjwYP3v//6vt5vUZuzcuVPjx49XdHS0TCaT3nzzTaftfO85y8rK0tChQxUaGqrw8HDdfvvtOnr0qFMMOXPWWF+FfDWM/kjjrFarTCaT05/IyEjH9vaWLworHlJZWam7775b//Vf/1Xn9qKiIl111VXKzc3V4cOHtWDBAs2fP18rVqyoFWu323Xffffppptuaulme50n8lZYWKiBAwfqz3/+sz744AP99Kc/1f33369Nmza11mG0Ok/krby8XImJiYqOjta+ffuUk5OjX/3qV1q6dGlrHUarayxv0qUv+Z/+9Ke655576tz+r3/9S7fddptuueUWHThwQFu2bNGXX36piRMntlSzvc4TeZMuFRF+//vf61e/+pX+8Y9/aNOmTRo2bFhLNLlN8FTepI71ewFoTI8ePfTcc89p//792r9/v2655RbddttttTrkb775pt577z1FR0d7qaW+obF8/vOf/9SNN96oa6+9Vtu3b9ff//53LVy4UEFBQV5uedvTWC5/8YtfKC8vT7m5uTpy5Ih+8YtfaObMmXrrrbe83PK2bd++fXr55Zc1cOBAp/XZ2dlaunSpVqxYoX379ikyMlKJiYk6e/asl1ra9tWVywsXLuj999/XwoUL9f777+uNN97QRx99pAkTJnixpWivXn/9dWVkZGjBggX629/+pptuuknjxo2jWP//nT9/XjfccEOd14kkvvcut2PHDs2YMUN79uxRQUGBLl68qKSkJJ0/f94RQ86cNdZXIV/1oz/iuuuvv16nTp1y/Dl48KBjW7vLlwGPWrVqlWGxWFyKnT59ujFq1Kha6+fOnWv85Cc/cWtfvs4Tefu2H/3oR8YDDzzggZa1bc3J2wsvvGBYLBbjm2++cazLysoyoqOjjerqak83tU1xJW9PPfWUccMNN9Ra/8c//tHw9/c3qqqqHOs2btxomEwmo7Ky0sMtbVuak7cPP/zQ8Pf3N/7xj3+0TOPasObkrUZH/L0AuKNr167G73//e8fyyZMnje985zvGoUOHjJ49exrLli3zXuN80Lfzec899xg/+clPvNwi3/XtXF5//fXG008/7bT9Bz/4gfHEE094o2k+4ezZs0afPn2MgoICIyEhwfj5z39uGIZhVFdXG5GRkcZzzz3niP3mm28Mi8Vi/O53v/NSa9u2+nJZl7179xqSjBMnTrReA9EhDBs2zPjZz37mtO7aa6815s2b56UWtV2SjA0bNjiW+d5rXElJiSHJ2LFjh2EY5MxVNX0V8lU/+iOua+jaRnvMFyNWvKisrExhYWFO67Zt26Y//vGPev75573Uqravrrw1JaajuTwnu3fvVkJCgsxms2NdcnKyPv/8cx0/ftwLLfQNQ4YMkZ+fn1atWqWqqiqVlZVp7dq1SkpKUkBAgLeb12Zt2rRJ3/3ud/WXv/xFvXv3Vq9evfTggw/q66+/9nbT2jx+LwD1q6qq0vr163X+/HnFx8dLkqqrq5Wenq5HH31U119/vZdb6Fsuz2d1dbXefvtt9e3bV8nJyQoPD1dcXFytqUlQW13n5o033qiNGzfq3//+twzD0LvvvquPPvpIycnJXm5t2zVjxgzdeuutGjNmjNP6Y8eOqbi4WElJSY51ZrNZCQkJKiwsbO1m+oT6clmXsrIymUwmph+FR1VWVqqoqMjp51aSkpKS+Ll1Ad97jSsrK5Mkx3UPctawy/sq5Kt+9Efc8/HHHys6Olq9e/fWvffeq3/961+S2me+/L3dgI5q9+7d+p//+R+9/fbbjnVfffWVJk+erNzcXHXp0sWLrWu76srb5f70pz9p3759eumll1qxZW1bXXkrLi5Wr169nOIiIiIc23r37t2aTfQZvXr1Un5+vu6++25NmzZNVVVVio+P1+bNm73dtDbtX//6l06cOKE//vGPevXVV1VVVaVf/OIXuuuuu7Rt2zZvN6/N4vcCULeDBw8qPj5e33zzja644gpt2LBB1113nSRpyZIl8vf31yOPPOLlVvqO+vJZXFysc+fO6bnnntPixYu1ZMkS5eXlaeLEiXr33XeVkJDg7aa3OQ2dm7/97W81depU9ejRQ/7+/urUqZN+//vf68Ybb/Ryq9um9evX6/3339e+fftqbSsuLpb0n75rjYiICJ04caJV2udLGsrl5b755hvNmzdPaWlp9D3gUV9++aWqqqrq/Lmt+ZlG/fjea5hhGJo1a5ZuvPFGxcbGSiJn9amvr1JzYZt8OaM/4p64uDi9+uqr6tu3r06fPq3FixdrxIgROnz4cLvMFyNWGlDXA3cu/7N//36393v48GHddtttevLJJ5WYmOhYP3XqVKWlpenmm2/25GG0utbO27dt375dkydP1iuvvOJzd6l6I28mk8lp2fj/D66/fH1b1lJ5q09xcbEefPBBTZo0Sfv27dOOHTsUGBiou+66y5E/X9DaeauurpbNZtOrr76qm266SSNHjtTKlSv17rvv1nrAYFvW2nlrL78XAE/r16+fDhw4oD179ui//uu/NGnSJH344YcqKirSb37zG61evdqnfpd5W335rK6uliTddttt+sUvfqHvf//7mjdvnlJSUvS73/3Oy61um+rLpXSpsLJnzx5t3LhRRUVF+vWvf63p06dr69atXm512/PZZ5/p5z//uXJzcxt8nk9dfVl+9p25mkvp0jPd7r33XlVXV+uFF15opRaio+HntnnIX90efvhhffDBB/rDH/5Qaxs5c9ZQX0UiX99Gf8R948aN05133qkBAwZozJgxjhu816xZ44hpT/lixEoDHn74Yd17770Nxlx+x39jPvzwQ91yyy2aOnWqnnjiCadt27Zt08aNG/WrX/1K0qUTq7q6Wv7+/nr55Zf105/+1K338pbWzluNHTt2aPz48Vq6dKnuv/9+t/bfFrR23iIjI2vdGVRSUiKpdvW4LWuJvDXk+eefV5cuXZSdne1Yl5ubq5iYGL333nsaPny4x96rJbV23qKiouTv76++ffs61vXv31+S9Omnn6pfv34ee6+W1Np5ay+/FwBPCwwM1DXXXCPp0hSN+/bt029+8xv1799fJSUluvrqqx2xVVVVmj17tpYvX85Ul/WoL585OTny9/d3jLio0b9/f+3atcsbTW3z6svl8uXL9fjjj2vDhg269dZbJUkDBw7UgQMH9Ktf/cql6Zk6kqKiIpWUlGjw4MGOdVVVVdq5c6dWrFjhuCmjuLhYUVFRjpiSkhKf6se2hsZyabPZ5OfnJ7vdrtTUVB07dkzb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/3uNHTtW/fv319e+9jU9/vjjam5u9qlpamrSypUrzSxXXXWV/umf/kmnTp3yqfN6vVqyZIlcLpciIiJ06623av/+/a32uWnTJtlsNpWUlOiHP/yhrrrqKkVERMjj8Vj6ubX493//d918883q16+foqOj9fd///c6cuSIT83MmTN1xRVX6A9/+IMmTZqkyMhIxcfH66mnnpIk7d27V7feeqsiIyN1/fXXa/PmzT7vb2ho0OLFizVkyBBzP2PGjNFLL710ST9vAABCUctttt577z1NmzZNAwYMkNPp1H333eczX7D6Od9ynuRi85Rdu3aZc6+v+uijj2Sz2bRp06YOx/0f//EfSk9PV3x8vPr376/hw4dr6dKl+uyzz8yamTNn6rnnnpMkn/naRx99JKntW4FZOZfTMsaf/vSnWr16tXkuJiUlRXv37r3YjxwISVyxAvSAH/3oR/rrX/+q/Px8vfLKK4qPj5ck3XjjjXrooYf0wgsvaN68ecrIyNBHH32kxx9/XLt27dK7776rQYMG6fnnn9fs2bP1v//7v9q+fXur7X/00UeaM2eOrrnmGklf/hI+f/58/fnPf9a//Mu/dHn8VVVVuu+++7RkyRLl5uaqT58+OnXqlMaNG6empib967/+q6699lq9/vrrWrx4sf73f/9Xzz//vCTp888/12233ab//d//1YoVKzRy5Ej9/ve/V15eniorK/XGG2/47Ov111/Xe++9p6eeeko2m02PPvqopk6dqhkzZuhPf/qTCgoKVFdXp4ULF+of/uEfVFlZKZvNps8++0xpaWkaMmSInnvuOcXFxam6ulpvvfWWzp492+WfAQAAwSbY5x/V1dX6wQ9+oKVLl+rJJ5/UG2+8oZUrV6q2tlYFBQWSvjwBctddd+n3v/+9lixZonHjxun48eN64oknNGHCBL3zzjvq37+/JGnWrFl68cUXtXjxYqWlpenQoUOaNm1au/OEH/7wh5o6daq2bNmizz77THa73dLPTZLy8vL02GOP6Z577lFeXp5Onz4tt9utlJQUHThwQEOHDjX34/V6NW3aND344IP653/+Z23btk3Lli1TfX29Xn75ZT366KO6+uqrlZ+fr5kzZyopKUmjR4+WJC1cuFBbtmzRypUrNWrUKH322Wc6dOiQTp8+3eWfPwAAoebv//7vNX36dD344IM6fPiwHn/8cX3wwQfat29fpz7nJWvzlK768MMPdccddygnJ0eRkZH6wx/+oKefflr79+/Xm2++KUl6/PHH9dlnn+n//t//qz179pjvbZn3XcjquZwWzz33nG644Qbz1rCPP/647rjjDh07dkxOp9MvOYGgYQDoEc8884whyTh27Ji57MiRI4YkY+7cuT61+/btMyQZjz32mLls6tSpxuDBgy+6n+bmZsPr9RpPPvmkERMTY5w/f95cN378eGP8+PGdGvf48eMNScbvfvc7n+VLly41JBn79u3zWf7QQw8ZNpvNOHr0qGEYhvGLX/zCkGT853/+p0/d008/bUgySkpKzGWSDJfLZZw7d85c9qtf/cqQZHzzm9/0ybJmzRpDkvH+++8bhmEY77zzjiHJ+NWvftWpfAAAhLJgn3/8+te/9lk+a9Yso0+fPsbx48cNwzCMl156yZBkvPzyyz51Bw4cMCQZzz//vGEYf8v84x//2Kdu69athiRjxowZ5rKNGzcakoz777/fp9bqz622ttbo37+/cccdd/jUffzxx4bD4TCysrLMZTNmzGg1fq/Xa1x11VWGJOPdd981l58+fdro27evsXDhQnNZUlKScffdd7fxEwQAAC2eeOKJDucBhYWFnZofWZ2nvPXWW4Yk46233vKpO3bsmCHJ2LhxY6sxtuf8+fOG1+s1ysrKDEnGf//3f5vrHn744XbfO3jwYJ95jtVzOS1jHDFihPHFF1+Ydfv37zckGS+99FK7YwVCFbcCAwLIW2+9JUmtLsu85ZZbNHz4cP3ud7+ztJ0333xTqampcjqd6tu3r+x2u/7lX/5Fp0+fVk1NTZfHOXDgQN1+++2t9nnjjTfqlltu8Vk+c+ZMGYZhfnvizTffVGRkpL73ve+1qpPUKuNtt92myMhI8/Xw4cMlSVOmTPG5/UjL8uPHj0uSvvGNb2jgwIF69NFH9Ytf/EIffPDBpcYFACCkBcv8IyoqSpmZmT7LsrKydP78eb399tuSvrzS9corr9Sdd96pL774wvzzzW9+Uy6Xy7z1Rkvme++912d706dPV1hY2xf1/8M//IPPa6s/tz179qixsbFVXWJiom6//fZWP1+bzaY77rjDfB0WFqZvfOMbio+P97kvenR0tGJjY825T8u+f/Ob32jp0qXatWuXGhsb28wCAADanwe89dZbnZ4fWZmndNWf/vQnZWVlyeVymXOt8ePHS1Kr24taZfVcToupU6eqb9++5uuRI0dKks98BOgtaKwAAaTlNg1tXaKZkJBg6TYO+/fvV3p6uiRp/fr1+n//7//pwIEDWr58uST55RfstsZ3+vTpdsfdsr7lf10uV6uHvcbGxiosLKxVxujoaJ/X4eHhHS7//PPPJUlOp1NlZWX65je/qccee0w33XSTEhIS9MQTT8jr9VrOCgBAqAuW+UdcXFyrZS6XS9LfMpw8eVJnzpxReHi47Ha7z5/q6mp9+umnPvUt728RFhammJiYNvd/4c/H6s+tsz/fiIgI9evXz2dZeHh4q7lPy/KWuY8k/du//ZseffRR/epXv9Jtt92m6Oho3X333frwww/bzAQAQG/W3jzg9OnTnf78tjJP6Ypz587pO9/5jvbt26eVK1dq165dOnDggF555RVJlz7Xsnoup8WF8ySHw9Gl/QPBjGesAAGk5QOqqqpKV199tc+6v/zlLz7372xPUVGR7Ha7Xn/9dZ9fyn/1q1/5bZwXNkWkL8deVVXVavlf/vIXSTLHHhMTo3379skwDJ/t1NTU6IsvvrCU0aoRI0aoqKhIhmHo/fff16ZNm/Tkk0+qf//+Wrp0qd/2AwBAMAuW+cfJkydbLauurpb0twyDBg1STEyMiouL29xGVFSUT311dbW+9rWvmeu/+OKLdk9+XDj/sfpz+2rdhaz+fK2KjIzUihUrtGLFCp08edK8euXOO+/UH/7wB7/tBwCAUNDePCAmJqbT8yMr85SWOZLH4/Gpa/niR0fefPNN/eUvf9GuXbvMq1Qk6cyZMxd9b0esnssB0BpXrAA9pK2ufsvttQoLC31qDxw4oCNHjmjixIk+72/rGwE2m01hYWE+l2Y2NjZqy5Ytfh3/hSZOnKgPPvhA7777rs/yF198UTabTbfddptZd+7cuVYnWl588UVzvb/ZbDbdfPPNevbZZ3XllVe2GiMAAL1FMM8/zp49q1dffdVn2bZt29SnTx9997vflSRlZGTo9OnTam5u1pgxY1r9GTZsmCRpwoQJkqStW7f6bO8///M/9cUXX1gaj9WfW0pKivr379+q7sSJE3rzzTcvy9xH+vKbszNnztQ999yjo0ePqqGh4bLsBwCAYNXePGDChAmdmh9J1uYp1157rSTp/fff96m78H1tafmCR8tcrsW6deta1XbmKhKr53IAtMYVK0APGTFihCTp5z//uWbMmCG73a5hw4Zp9uzZys/PV58+fTRlyhR99NFHevzxx5WYmKgf//jHPu9/5ZVXtHbtWo0ePVp9+vTRmDFjNHXqVK1evVpZWVmaPXu2Tp8+rZ/+9KetPnz97cc//rFefPFFTZ06VU8++aQGDx6sN954Q88//7weeughXX/99ZKk+++/X88995xmzJihjz76SCNGjNDu3buVm5urO+64Q6mpqX4Zz+uvv67nn39ed999t6677joZhqFXXnlFZ86cUVpaml/2AQBAsAnm+UdMTIweeughffzxx7r++uu1Y8cOrV+/Xg899JCuueYaSdIPfvADbd26VXfccYceeeQR3XLLLbLb7Tpx4oTeeust3XXXXfr7v/97DR8+XPfdd5/WrFkju92u1NRUHTp0SD/96U81YMAAS+Ox+nO78sor9fjjj+uxxx7T/fffr3vuuUenT5/WihUr1K9fPz3xxBN++xklJycrIyNDI0eO1MCBA3XkyBFt2bJFKSkpioiI8Nt+AAAIBa+88orCwsKUlpamw4cP6/HHH9fNN9+s6dOnKzw83PL8SLI2T3G5XEpNTVVeXp4GDhyowYMH63e/+515O6+OjBs3TgMHDtSDDz6oJ554Qna7XVu3btV///d/t6ptme89/fTTmjJlivr27auRI0eat1D/KqvncgC0oQsPvgfQRcuWLTMSEhKMPn36GJKMt956y2hubjaefvpp4/rrrzfsdrsxaNAg47777jM++eQTn/f+9a9/Nb73ve8ZV155pWGz2Yyv/nX+93//d2PYsGGGw+EwrrvuOiMvL8/YsGGDIck4duyYWTd+/Hhj/PjxnRrz+PHjjZtuuqnNdcePHzeysrKMmJgYw263G8OGDTOeeeYZo7m52afu9OnTxoMPPmjEx8cbYWFhxuDBg41ly5YZn3/+uU+dJOPhhx/2WXbs2DFDkvHMM8/4LH/rrbcMScZ//dd/GYZhGH/4wx+Me+65x/j6179u9O/f33A6ncYtt9xibNq0qVN5AQAINcE8/9i1a5cxZswYw+FwGPHx8cZjjz1meL1en1qv12v89Kc/NW6++WajX79+xhVXXGHccMMNxpw5c4wPP/zQrPN4PMaiRYuM2NhYo1+/fsbYsWONPXv2GIMHDzZmzJhh1m3cuNGQZBw4cKDVuKz+3AzD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uS644ALFxMRo1qxZcjqdbjHffvutpk+frosuukjdunXTJZdconnz5rnF1R0vrFy5st5jnHs+yNNzI5s2bdLYsWPVo0cPhYSE6Oqrr9bf//53j3NzuVyKjIxUenp6vXUnTpxQ9+7dlZmZKensua1Zs2bpyiuvNJ8jCQkJ+tvf/tbs4zR2e7d3331XFotF7777bpvmBTSHK1YAH/Ef//Ef+vWvf62pU6dq7969mjt3riTpz3/+swzD0A033KC///3vmjt3rn7605/qww8/1COPPKJt27Zp27ZtstlsLXq8zMxMrV69Wo8//riGDh2q7777Tvv27dM333xjxrzzzjsaN26c4uPj9dxzz8lut2vt2rX69a9/rdOnT9e71+VvfvMbTZgwQWvWrNEXX3yh+++/X7fccovefvttM+a3v/2tli1bphkzZig1NVWHDx/Www8/rHfffVe7d+9Wr169Guxv3RgUFxfrD3/4g6666ir97//+r8aPH18vNj09Xbt379YTTzyhSy+9VCdOnNDu3bvdcgMAIFClpaXplltu0bRp01RUVKTc3Fy5XC5t2rRJ06dP1+zZs7VmzRo9+OCD+slPfqJJkybp9OnTGj16tI4ePaqHHnpIQ4YM0f79+/WHP/xBe/fu1aZNm2SxWFr0ed2Qzz77TAkJCfrNb34ju92uw4cPa+HChbrmmmu0d+9eWa1Wt/imjp9a64MPPtCsWbM0Z84cRUVF6U9/+pOmTp2qn/zkJ7r22mslnS2qXHXVVXK5XOa4fPPNN3rrrbdUXl6uqKgoHT9+XKNGjVJ1dbUee+wx9evXT6+//rpmz56tzz77TM8++6zb4z7zzDMaMmSInnnmGZ04cUKzZs3S9ddfr/j4eFmtVv35z3/WkSNHNHv2bP3mN7/R+vXrzW2zs7P1+9//Xrfffrt+//vfq7q6Wk899ZR++tOfaufOnbrssstaPS4AADSF44z6XC6XJk6cqKlTp2rWrFnasmWLHnvsMdntdv3hD3+QdLbgcN111+mzzz7T/PnzNWTIEP3jH/9QTk6O9uzZozfeeKNFjyl5dm4kPz9ft956q37xi19o1apVslqtev7555WSkqK33npLY8eObfZxrFarbrnlFj333HN65pln1KNHD3PdSy+9pO+//1633367JMnpdOrbb7/V7NmzddFFF6m6ulqbNm3SpEmT9MILL+jWW29tcZ4NaYu8gGYZALzqkUceMSQZubm5bu3Tp083goODjdraWqOgoKDBmJdfftmQZCxbtsxsk2Q88sgj9R7n4osvNqZMmWIux8bGGjfccEOTfRs0aJAxdOhQw+VyubWnpqYavXv3NmpqagzDMIwXXnjBkGRMnz7dLS43N9eQZBw7dswwDMM4cOBAg3E7duwwJBkPPfSQ2TZlyhTj4osvNpfffPNNQ5Lxxz/+0W3bJ554ol7OF1xwgZGRkdFkbgAABJq6Y46nn37arf3KK680JBmvvvqq2eZyuYwf/ehHxqRJkwzDMIycnByjS5cuxq5du9y2/Z//+R9DkrFx40bDMFr2eV13/HDo0KEG+1tbW2u4XC7jyJEjhiTjb3/7W71cmjp+8lTdvn7o4osvNoKDg40jR46YbVVVVUZ4eLgxbdo0s+2OO+4wrFar8dFHHzW6/zlz5hiSjB07dri1//a3vzUsFotx8OBBwzAM49ChQ4Yk44orrjCPsQzDMBYvXmxIMiZOnOi2fUZGhiHJqKioMAzDMD7//HMjKCjImDlzplvcyZMnDYfDYaSlpXkyHAAAnBeOMxo2ZcoUQ5Lx3//9327tP//5z42BAweay88991yDcQsWLDAkGYWFhYZh/P/HCy+88EK9x2rpuZHvvvvOCA8PN66//nq39pqaGuOKK64wRowY4Wmaxocffljv/JRhGMaIESOMYcOGNbrdmTNnDJfLZUydOtUYOnSo27pzz2M19jt95513DEnGO++80+Z5AU3hVmCAj5g4caLb8pAhQ/T999+rrKzMvOLj3CtEfvWrXyk0NPS8LmUcMWKE3nzzTc2ZM0fvvvuuqqqq3NZ/+umn+uc//6mbb75ZknTmzBnz389//nMdO3ZMBw8ebDYHSTpy5Iiks1fANJTHiBEjNHjw4CbzqNu2rj91Jk+e3GBuK1eu1OOPP67t27fL5XI1ul8AAAJNamqq2/LgwYNlsVjcvu0ZFBSkn/zkJ+Zn+Ouvv67Y2FhdeeWVbscEKSkpbrdeaMnndUPKysp09913KyYmRkFBQbJarbr44oslSQcOHKgX39TxU2tdeeWV6tu3r7kcHBysSy+91BwTSXrzzTd13XXXafDgwY3u5+2339Zll12mESNGuLXfdtttMgzD7cpeSfr5z3+uLl3+/z/T6vY9YcIEt7i69s8//1yS9NZbb+nMmTO69dZb3X5HwcHBGj16dL3bYwAA0B44zqjPYrHo+uuvr7evHx5TvP322woNDdUvf/lLt7i68yfne96nqXMjxcXF+vbbbzVlyhS3ca+trdW4ceO0a9euerdia0xcXJyGDRumF154wWw7cOCAdu7cqTvuuMMt9q9//auuvvpqXXDBBebvYcWKFQ3+Ds5HW+YFNIVbgQE+IiIiwm257tZeVVVV+uabbxQUFFRv4jWLxSKHw3Fet7j6r//6L/Xp00cvv/yyFixYoODgYKWkpOipp57SgAEDzPuCz549W7Nnz25wH+feh7SpHCSZ/ezdu3e9fUVHR7sdVJyrbgzOfQyHw1Ev9uWXX9bjjz+uP/3pT3r44Yd1wQUX6N///d+Vm5vbYDwAAIEkPDzcbblbt24KCQlRcHBwvfbKykpJZ+eC+/TTT+vdIqNO3TFBSz6vz1VbW6vk5GR99dVXevjhhxUXF6fQ0FDV1tZq5MiR9b4EIjV/7NEa5+67bv8/3Pfx48ebnfj+m2++Ub9+/eq1R0dHm+t/qKHfT1Pt33//vSSZx25XXXVVg/34YbEGAID2wnFGfQ3lb7PZzM9w6WxuDoej3rxvkZGRCgoKOq/zPs2dG6k7dji3mPND3377rUJDQz16vDvuuEP33HOP/vnPf2rQoEF64YUXZLPZdNNNN5kxr776qtLS0vSrX/1K999/vxwOh4KCgrR06dI2uZWrpDbPC2gMhRXAD0REROjMmTM6fvy4W3HFMAyVlpa6/QFts9nqTYAm1f+jPTQ0VPPnz9f8+fP19ddfm1evXH/99frnP/9pznUyd+5cTZo0qcF+DRw4sMV5SNKxY8fqnYT46quvGp1fpW7bM2fO6JtvvnE7uCktLa0X26tXLy1evFiLFy/W559/rvXr12vOnDkqKytTQUFBi/oMAADOfrZ279690T946z7DW/J5fa59+/bpgw8+0MqVKzVlyhSz/dNPP21l79vPj370Ix09erTJmIiICB07dqxe+1dffSVJTR7/tETdfv7nf/7H/PYtAAD+gOOMs7nt2LFDhmG4FVfKysp05swZcwzqCjTnnvdpqPDS3LmRun3m5eVp5MiRDfYrKirK4xxuuukmZWZmauXKlXriiSe0evVq3XDDDerZs6cZk5+fr/79++vll192y7Oh81jnaiz3c7/029Z5AY3ha0uAH6ibVCs/P9+t/ZVXXtF3333nNulWv3799OGHH7rFvf322zp16lSj+4+KitJtt92mm266SQcPHtTp06c1cOBADRgwQB988IGGDx/e4L+wsLAW5fGzn/2swTx27dqlAwcONDl52HXXXSdJevHFF93a16xZ0+Rj9u3bVzNmzFBSUpJ2797dov4CAICzUlNT9dlnnykiIqLBY4K6KzLO9/NakvnHdd23Qes8//zzbZBB+xg/frzeeeederdH/aGxY8fqo48+qncc8pe//EUWi8Ucs9ZKSUlRUFCQPvvss0aP3QAA8EUcZ5w9Xjh16pRee+01t/a//OUv5nrp7Pmb4ODgeud9/va3vzW5/4bOjVx99dW68MIL9dFHHzV67FB3hawnevbsqRtuuEF/+ctf9Prrr6u0tLTebcAsFou6devmVlQpLS1ttv+SzOfBubmvX7/ebbmt8wIawxUrgB9ISkpSSkqKHnzwQVVWVurqq6/Whx9+qEceeURDhw5Venq6GZuenq6HH35Yf/jDHzR69Gh99NFHWrJkiex2u9s+4+PjlZqaqiFDhqhnz546cOCAVq9erYSEBIWEhEg6e4Axfvx4paSk6LbbbtNFF12kb7/9VgcOHNDu3bv117/+tUV5DBw4UHfddZfy8vLUpUsXjR8/XocPH9bDDz+smJgY/e53v2t02+TkZF177bV64IEH9N1332n48OH63//9X61evdotrqKiQtddd50mT56sQYMGKSwsTLt27VJBQUGjV94AAICmZWRk6JVXXtG1116r3/3udxoyZIhqa2v1+eefq7CwULNmzVJ8fLzHn9cNGTRokH784x9rzpw5MgxD4eHh2rBhg4qKijogw/Pz6KOP6s0339S1116rhx56SHFxcTpx4oQKCgqUmZmpQYMG6Xe/+53+8pe/aMKECXr00Ud18cUX64033tCzzz6r3/72t7r00kvbpC/9+vXTo48+qnnz5ulf//qXxo0bp549e+rrr7/Wzp07zauVAQDwNRxnSLfeequeeeYZTZkyRYcPH1ZcXJy2bt2q7Oxs/fznP1diYqKks4WJW265RX/+85/14x//WFdccYV27txZr7jkybmRCy64QHl5eZoyZYq+/fZb/fKXv1RkZKSOHz+uDz74QMePH9fSpUtblMcd8MblVAAAbWZJREFUd9yhl19+WTNmzFCfPn3MftdJTU3V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+kz2J55+zvgjT98//c3LL7+s/Px8rVmzRpdffrn27NmjjIwMRUdHa8qUKd7uXpvqzO8jLpdLN954o2pra/Xss896uzutUlJSoj/+8Y/avXt3p/n9AJ35/aclOupvjPOJMf7fhM2+8HvxhXM1/jqGvnK+xx/Hz9fOF/njGPrS+aaOHD+uWGlCr1691LVr13rVqrKysnqVLX/ncDgk1a/M/TBXh8Oh6upqlZeXNxnz9ddf19v/8ePHfWbMZs6cqfXr1+udd95Rnz59zPZAGINu3brpJz/5iYYPH66cnBxdccUV+uMf/xgQuZeUlKisrEzDhg1TUFCQgoKCtHnzZv3Xf/2XgoKCGq1Od6YxOFdoaKji4uL0ySefBMRzoHfv3rrsssvc2gYPHqzPP/9cUmC8B8C/BMJxSGOfyf6ouc+Zmpoab3fxvDX3/umv7r//fs2ZM0c33nij4uLilJ6ert/97ned6oojTz7b/JnL5VJaWpoOHTqkoqIiv79a5R//+IfKysrUt29f833kyJEjmjVrlvr16+ft7gEtEgjHMZ7oyL8xHA5HvccpLy+Xy+VqMqasrExS/W+TdzRfOFfjz2PoC+d7/HX8fOl8kb+O4bm8db6po8ePwkoTunXrpmHDhqmoqMitvaioSKNGjfJSr9pH//795XA43HKtrq7W5s2bzVyHDRsmq9XqFnPs2DHt27fPjElISFBFRYV27txpxuzYsUMVFRVeHzPDMDRjxgy9+uqrevvtt9W/f3+39YEwBucyDENOpzMgch87dqz27t2rPXv2mP+GDx+um2++WXv27NEll1zS6cfgXE6nUwcOHFDv3r0D4jlw9dVX6+DBg25tH3/8sS6++GJJgfkeAN/WmY9DmvtM9kfNfc507drV2108b829f/qr06dPq0sX9z+HunbtqtraWi/1qO158tnmr+qKKp988ok2bdqkiIgIb3ep1dLT0/Xhhx+6vY9ER0fr/vvv11tvveXt7gEt0pmPY1qiI//GSEhI0L59+3Ts2DEzprCwUDabTcOGDTNjtmzZourqareY6OhorxVwfelcjb+OYUO8cb7HX8fPl84X+esYnstb55s6fPxaNNV9AFq7dq1htVqNFStWGB999JGRkZFhhIaGGocPH/Z211rs5MmTxvvvv2+8//77hiRj4cKFxvvvv28cOXLEMAzDePLJJw273W68+uqrxt69e42bbrrJ6N27t1FZWWnu4+677zb69OljbNq0ydi9e7fxs5/9zLjiiiuMM2fOmDHjxo0zhgwZYmzbts3Ytm2bERcXZ6SmpnZ4vuf67W9/a9jtduPdd981jh07Zv47ffq0GdOZx2Du3LnGli1bjEOHDhkffvih8dBDDxldunQxCgsLDcPo3Lk3ZvTo0cZ9991nLnf2MZg1a5bx7rvvGv/617+M7du3G6mpqUZYWJj5ftbZ89+5c6cRFBRkPPHEE8Ynn3xivPjii0ZISIiRn59vxnT2MYD/6UzHIT/kyWdyZ3Du54y/8uT90x9NmTLFuOiii4zXX3/dOHTokPHqq68avXr1Mh544AFvd61F2uIY3xc1lZfL5TImTpxo9OnTx9izZ4/b+4jT6fR215vU3O/rXBdffLGxaNGiju0k0EY663HMuXzlXMuZM2eM2NhYY+zYscbu3buNTZs2GX369DFmzJhhxpw4ccKIiooybrrpJmPv3r3Gq6++avTo0cP4z//8zw4YqYb50rkafx1DXznf46/j1xBvnS/y1zH0lfNNHT1+FFY88MwzzxgXX3yx0a1bN+Pf/u3fjM2bN3u7S+flnXfeMSTV+zdlyhTDMAyjtrbWeOSRRwyHw2HYbDbj2muvNfbu3eu2j6qqKmPGjBlGeHi40b17dyM1NdX4/PPP3WK++eYb4+abbzbCwsKMsLAw4+abbzbKy8s7KMvGNZS7JOOFF14wYzrzGNxxxx3m8/hHP/qRMXbsWPND1jA6d+6NOfeDsrOPwa9//Wujd+/ehtVqNaKjo41JkyYZ+/fvN9d39vwNwzA2bNhgxMbGGjabzRg0aJCxbNkyt/WBMAbwP53lOOSHPPlM7gw6S2HFMJp///RHlZWVxn333Wf07dvXCA4ONi655BJj3rx5Pn9i/lxtcYzvi5rK69ChQ42+j7zzzjve7nqTmvt9nYvCCvxdZzyOOZcvnWs5cuSIMWHCBKN79+5GeHi4MWPGDOP77793i/nwww+Nn/70p4bNZjMcDoeRlZVl1NbWtvm4eMrXztX44xj60vkefxy/hnjzfJE/jqEvnW/qyPGzGMb/m50FAAAAAAAAAAAATWKOFQAAAAAAAAAAAA9RWAEAAAAAAAAAAPAQhRUAAAAAAAAAAAAPUVgBAAAAAAAAAADwEIUVAAAAAAAAAAAAD1FYAQAAAAAAAAAA8BCFFQAAAAAAAAAAAA9RWAEAAMD/154dCAAAAAAI8rdeYYDSCAAAAJjECgAAAAAAwCRWAAAAAAAAJrECAAAAAAAwiRUAAAAAAIAp5Ii4MxVJu68AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 2000x1500 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "housing.hist(bins=50, figsize=(20,15))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "efc97345",
   "metadata": {},
   "outputs": [],
   "source": [
    "# This his() method relies on Matplotlib, which in turn relies on a user-specified graphical backend to draw on\n",
    "# your screen. So before you can plot anything, you need to specify which backend Matplotlib should use. The\n",
    "# simplest option is to use Jupyter's magic command %matplotlib inline. This tell Jupyter to set up Matplotlib so\n",
    "# it use Jupyter's own backend.Plots are then rendered within the notebook itself, as Jupyter will automatically\n",
    "# display plots when a cell is executed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "09ca5c77",
   "metadata": {},
   "outputs": [],
   "source": [
    "# There are a few things you might notice in thest histograms:\n",
    "#     1.First, the median income attribute dose not look like it is expressed in US dollars(USD). After checking\n",
    "#     with the team that collected the data, you are told that the data has been scaled and 设置上限 15 (actally,\n",
    "#     15.0001) for higher median incomes, and at 0.5(actually 0.4999) for lower median incomes. The numbers\n",
    "#     represent roughly tens of thousands of dollars (e.g., 3 actually means about $30,000). Working with pre-\n",
    "#     processed attributes is common in Machine Learning, and it is not necessarily a problem, but you should try\n",
    "#     to understand how the data was computed.\n",
    "#     2.The housing median age and the median house value were also 设置上线. The latter may be a serious problem\n",
    "#     since it is your target attribute(your labels). Your Machine Learning algorithms may learn that prices\n",
    "#     never go beyond that limit. You need to check with your cline team (the team that will use your system's\n",
    "#     out-put) to see if this a problem or not. if they need precise pridictions even beyond $ 500,000, then you\n",
    "#     have two options:\n",
    "#         a.Collect proper labels for districts whose labels were capped.\n",
    "#         b.Remove those districts from training set (and also from the test set, since you system should not be\n",
    "#         evaluated poorly if the predicts values )\n",
    "#     3.These attributes have very different scales. We will discuss this later in this chapter, when we explore\n",
    "#     feature scaling.\n",
    "#     4.Finaly, many histograms are tail-heavy:they extend much farther to the right of the median than to the\n",
    "#     left.This may make it a bit harder for some Machine Learning algorithms to detect patterns. We will try\n",
    "#     transforming thest attributes later on to have more bell-shaped distributions.\n",
    "# Hopefully you now have a better understanding of the kind of data you are dealing with."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "6a51c960",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a Test Set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "11e9be67",
   "metadata": {},
   "outputs": [],
   "source": [
    "# It may sound strange to 自发地 set aside part of the data at this stage. After all, you have only taken a quick\n",
    "# glance at the data, and surely you should learn a whole lot more about it before you decide what algorithms to\n",
    "# use, righ? This is true, but your brain is an amazing pattern detection system, which means that it is highly\n",
    "# 易于..的 overfitting: if you look at the test set, you may 偶然发现 some 貌似 interesting pattern in the test\n",
    "# data that leads you to select a particular kind of Machine Learning model. When you estimate the generalization\n",
    "# error using the test set, you estimate the 泛化误差 using the test, your estimate will be too optimistic, and \n",
    "# you will launch a system that will not perform as well as expected. This is called 数据窥视偏差.\n",
    "\n",
    "# Greating a test set is theoretically simple: pick some instances ramdomly, typically 20% of the dataset(or less\n",
    "# if your dataset is very large), and set them aside:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "bf2979ed",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "def split_train_test(data, test_ratio):\n",
    "    shuffled_indices = np.random.permutation(len(data))\n",
    "    test_set_size = int(len(data) * test_ratio)\n",
    "    test_indices = shuffled_indices[:test_set_size]\n",
    "    train_indices = shuffled_indices[test_set_size:]\n",
    "    return data.iloc[train_indices],data.iloc[test_indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "9b7c8f87",
   "metadata": {},
   "outputs": [],
   "source": [
    "# You can then use this function like this\n",
    "train_set,test_set = split_train_test(housing,0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "71918927",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16512"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(train_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "4db7c55e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4128"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(test_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "5884cc85",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Well,this works, but it is not perfect: if you run the program again, it will generate a different test set!\n",
    "# Over time, you(or your Machine Learning algorithms) will get to see the whole dataset, which is what you want\n",
    "# to avoid.\n",
    "\n",
    "# One solution is to save the test set on the first run and then load it in subsequent runs. Another option is to\n",
    "# set the ramdom number generator's seed(e.g., with np.random.seed(42)) before calling np.random.permutation() so\n",
    "# that it always generates the same shuffled indices.\n",
    "\n",
    "# But both these solutions will break the next time you fetch an updated dataset. To have a stable train/test\n",
    "# splilt even after updating the dataset, a common solution is to use each instance's identifier to decide\n",
    "# whether or not it should go in the test set (assuming instances have a unique and immutable identifier). For\n",
    "# example, you could compute a hash of each instance's identifier and put that instance in the test set if the\n",
    "# hash is lower than or equal to 20% of the maximum hash value. This ensures that the test set will remain \n",
    "# consistent across multiple runs, even if you refresh the dataset. The new test set will contain 20% of the new\n",
    "# instances, but it will not contain any instance that was previously in the training set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "0ce84e02",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here is a possible implementation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "c9e5d564",
   "metadata": {},
   "outputs": [],
   "source": [
    "from zlib import crc32\n",
    "def test_set_check(identifier, test_ratio):\n",
    "    # 做CRC32哈希，得到一个32-bit 整数\n",
    "    # & 0xffffffff 位操作，得到一个无符号的32-bit 整数\n",
    "    # 2 ** 32 2的32次方 = 所有可能的CRC32 值范围\n",
    "    # 比较意义是：如果哈希值落在前20%的区间，则判定为测试集\n",
    "    return crc32(np.int64(identifier)) & 0xffffffff < test_ratio * 2 ** 32\n",
    "def split_train_test_by_id(data, test_ratio, id_column):\n",
    "    ids = data[id_column]\n",
    "    in_test_set = ids.apply(lambda id_:test_set_check(id_, test_ratio))\n",
    "    return data.loc[~in_test_set],data.loc[in_test_set]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "b71ce962",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Unfortunately, the housing dataset does not have an identifier column. The simplest solution is to use the row\n",
    "# index as the ID"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "7a05d476",
   "metadata": {},
   "outputs": [],
   "source": [
    "housing_with_id = housing.reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "f31c1d4a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>ocean_proximity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>-122.23</td>\n",
       "      <td>37.88</td>\n",
       "      <td>41.0</td>\n",
       "      <td>880.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>322.0</td>\n",
       "      <td>126.0</td>\n",
       "      <td>8.3252</td>\n",
       "      <td>452600.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>-122.22</td>\n",
       "      <td>37.86</td>\n",
       "      <td>21.0</td>\n",
       "      <td>7099.0</td>\n",
       "      <td>1106.0</td>\n",
       "      <td>2401.0</td>\n",
       "      <td>1138.0</td>\n",
       "      <td>8.3014</td>\n",
       "      <td>358500.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>-122.24</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1467.0</td>\n",
       "      <td>190.0</td>\n",
       "      <td>496.0</td>\n",
       "      <td>177.0</td>\n",
       "      <td>7.2574</td>\n",
       "      <td>352100.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>-122.25</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1274.0</td>\n",
       "      <td>235.0</td>\n",
       "      <td>558.0</td>\n",
       "      <td>219.0</td>\n",
       "      <td>5.6431</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>-122.25</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1627.0</td>\n",
       "      <td>280.0</td>\n",
       "      <td>565.0</td>\n",
       "      <td>259.0</td>\n",
       "      <td>3.8462</td>\n",
       "      <td>342200.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   index  longitude  latitude  housing_median_age  total_rooms  \\\n",
       "0      0    -122.23     37.88                41.0        880.0   \n",
       "1      1    -122.22     37.86                21.0       7099.0   \n",
       "2      2    -122.24     37.85                52.0       1467.0   \n",
       "3      3    -122.25     37.85                52.0       1274.0   \n",
       "4      4    -122.25     37.85                52.0       1627.0   \n",
       "\n",
       "   total_bedrooms  population  households  median_income  median_house_value  \\\n",
       "0           129.0       322.0       126.0         8.3252            452600.0   \n",
       "1          1106.0      2401.0      1138.0         8.3014            358500.0   \n",
       "2           190.0       496.0       177.0         7.2574            352100.0   \n",
       "3           235.0       558.0       219.0         5.6431            341300.0   \n",
       "4           280.0       565.0       259.0         3.8462            342200.0   \n",
       "\n",
       "  ocean_proximity  \n",
       "0        NEAR BAY  \n",
       "1        NEAR BAY  \n",
       "2        NEAR BAY  \n",
       "3        NEAR BAY  \n",
       "4        NEAR BAY  "
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_with_id.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "79878ae8",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_set,test_set = split_train_test_by_id(housing_with_id, 0.2,\"index\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "019ef514",
   "metadata": {},
   "outputs": [],
   "source": [
    "# If you use the row index as a unique identifier, you need to make sure that new data gets appended to the end\n",
    "# of the dataset and that no row ever gets deleted. If this is not possible, then you can try to use the most\n",
    "# stable features to build a unique identifier. For example, a district's latitude and longitude are guaranteed\n",
    "# to be stable for a few million years, so you could combine them into an ID like so."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "7e8ac6c6",
   "metadata": {},
   "outputs": [],
   "source": [
    "housing_with_id[\"id\"] = housing[\"longitude\"] * 1000 + housing[\"latitude\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "55c1df0c",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_set,test_set = split_train_test_by_id(housing_with_id,0.2,\"id\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "568c7254",
   "metadata": {},
   "outputs": [],
   "source": [
    "Scikit-Learn provides a few funtions to split datasets into multiple subsets in various ways.The simplest \n",
    "function is train_test_split(), which does pretty much the same thing as the function split_train_test(), with\n",
    "a couple of additional features. First, there is a random_state parameter that allow you to set the ramdom\n",
    "generator seed. Second, you can pass it multiple datasets with an identical number of rows,and it will split\n",
    "them on the same indices (this is very useful, for example, if you have a separate DataFrame for labels):\n",
    "    "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
